<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>1.Object.defineProperty</title>
	</head>
	<body>
		<!-- 
				聊聊Object.defineProperty（牢牢掌握）
						1.作用：增强对象
						2.应用：很多Vue底层原理都是借助了它
		 -->
		<script type="text/javascript" >
			let number = 30
			let person = {
				name:'烟酒嗓渊哥',
				sex:'男',
			}

			Object.defineProperty(person,'age',{
				// value:18, //配置属性值
				// enumerable:true, //配置属性是否可以枚举，默认值为false
				// configurable:true, //配置属性是否可以删除，默认值为false
				// writable:true,//配置属性是否可以修改，默认值为false

				//当有人读取person.age时，get就会被调用，且get返回的值就作为person.age的值
				get(){
					console.log('get函数被调用了')
					return number
				},
				//当有人修改person.age时，set就会被调用，且set函数中要去操作所依赖的数据
				set(value){
					console.log('set函数被调用了',value)
					number = value
				}
			})

			//如下代码会形成递归，进而报错！
			/* Object.defineProperty(person,'phone',{
				get(){
					return '13645677654'
				},
				set(value){
					person.phone = value
				}
			}) */
		</script>
	</body>
</html>